package com.ruoyi.quartz.task;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import com.ruoyi.business.domain.BusPerson;
import com.ruoyi.business.domain.BusRepair;
import com.ruoyi.business.service.IBusPersonService;
import com.ruoyi.business.service.IBusRepairService;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.exception.job.TaskException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.quartz.controller.SysJobController;
import com.ruoyi.quartz.domain.SysJob;
import com.ruoyi.quartz.service.ISysJobService;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import javax.xml.crypto.Data;
import java.util.Date;
import java.util.Set;

@Component
public class CheckMsg {

    @Resource
    private StringRedisTemplate stringRedisTemplate;

    @Resource
    private IBusRepairService busRepairService;

    @Resource
    private IBusPersonService busPersonService;

    @Resource
    private ISysJobService jobService;

    public void testone() {
        System.out.println("执行检查消息任务 : " + new Date());
    }

    /**
     * 检查管理员派遣任务后员工是否接取任务
     *
     * @param ids     ids  员工id
     * @param taskId  任务id   维修任务id
     * @param adminId 管理员id     当前用户id
     * @throws SchedulerException 调度程序异常
     */
    public void checkRepair(String ids, Long taskId,Long adminId) throws SchedulerException, TaskException {
//      获取任务信息
        SysJob sysJob = jobService.selectJobById(101L);
        sysJob.setStatus("1");
        SysJobController sysJobController = new SysJobController();

//        获取员工的id，以及任务编号
        System.out.println("ids:"+ ids + " taskId:"  + taskId);

//      获取各个员工id
        String[] split = ids.split(",");
//       获取发布人（当前用户的id）
        Long userId = adminId;
//        遍历员工id，并且获取任务的状态
         for (String s : split) {
            String key = "msg:" + s;
            //        查询当前用户的信箱
            Set<String> tasks = stringRedisTemplate.opsForZSet().reverseRange(key, 0, -1);
            String taskid = taskId.toString();
//            员工的id
            Long id = Long.parseLong(s);
//            如果集合中不存在任务编号，则向发布人传递消息，xx员工拒绝了任务
             if (tasks.isEmpty() ||!tasks.contains(taskid) ){
                 //                          获取员工的姓名
                 BusPerson busPerson = busPersonService.selectBusPersonById(id);
                 stringRedisTemplate.opsForZSet().add("msg:" + userId, "员工:" + busPerson.getPersonName() + " -拒绝了任务" , System.currentTimeMillis());
                 //                          结束这次定时任务   修改任务的状态即可停止任务。
             }

            if (tasks != null && !tasks.isEmpty()) {
                for (String task : tasks) {
//                    如果当前任务的id与当前任务的id一致，则检查该任务的状态是否变为1（已整改）
                  if (taskId.equals(Long.parseLong(task))){
                      BusRepair busRepair = busRepairService.selectBusRepairById(taskId);
                      if (busRepair.getTaskStatus().equals("1")){
//                          获取员工的姓名
                          BusPerson busPerson = busPersonService.selectBusPersonById(id);
//                          向发布人传递消息，xx员工已接取任务
                          stringRedisTemplate.opsForZSet().add("msg:" + userId, "员工:" + busPerson.getPersonName() + " -已接取任务" , System.currentTimeMillis());
                          //                          结束这次定时任务   修改任务的状态即可停止任务。

                      }
                  }
                }
            }
        }

    }
}
